#import <UIKit/UIKit.h>
#import "BLEDevice.h"
#import "FSDevice.h"

//系统应用指令
typedef NS_ENUM(int, BicycleCommand) {
    BICYCLE_INFO			= 0x41,		//系统信息
    BICYCLE_STATE			,			//系统状态
    BICYCLE_DATA			,			//系统数据
    BICYCLE_CONTROL			,			//控制系统
};

//系统信息(读取)
typedef NS_ENUM(int, BicycleInfo) {
    BICYCLE_INFO_MODEL		= 1,		//返回机型 (厂家代码/机型代码)
    BICYCLE_INFO_PARAM		,			//设备参数 (最高阻力级别/系统单位/模式/模式段数)
    BICYCLE_INFO_DISTANCE	,			//累计计数
	BICYCLE_INFO_DATE		,			//同步日期 指令后为终端日期时间用于同步车表
};

//系统状态(发送状态指令后,设备将返回以下状态及数据)
typedef NS_ENUM(int, BicycleState) {
    BICYCLE_STATE_NORMAL	= 0,		//常规等待运行
    BICYCLE_STATE_START		,			//启动过程 (启动倒计值)
    BICYCLE_STATE_RUNNING	,			//运行数据 (速度W/阻力B/踏频B/心率B/程式段B/瓦特W)
	BICYCLE_STATE_PAUSE		,			//暂停运行 (数据同上)
    
    BICYCLE_STATE_SLEEP     = 20,       //睡眠中
    BICYCLE_STATE_ERROR		,			//系统故障 (故障代码)
};

//系统数据
typedef NS_ENUM(int, BicycleData) {
    BICYCLE_DATA_SPORT		= 1,		//运动数据 (时长W/距离W/热量W/计数W) 运行会同BICYCLE_STATE指令同步发送
    BICYCLE_DATA_INFO		,			//运动信息 (用户ID/运动ID/模式/模式段数/模式倒计值)
    BICYCLE_DATA_DATAS		,			//模式数据 (索引/数据...)
	
	//向车表传输数据，在车表显示其值
	BICYCLE_DATA_SHOW		= 10,		//显示数据 (类型1/值1/类型2/值2/...)
};

//系统控制(写入)
typedef NS_ENUM(int, BicycleCotrol) {
	BICYCLE_CONTROL_READY	= 1,		//准备运行 返回:启动倒计值
	BICYCLE_CONTROL_START	,			//开始或继续运行
	BICYCLE_CONTROL_PAUSE	,			//暂停运行
    BICYCLE_CONTROL_STOP	,			//停止运行
	BICYCLE_CONTROL_LEVLE	,			//控制阻力 (阻力级别)
	
	//以下应在开始前依情况写入
    BICYCLE_CONTROL_USER	= 10,		//用户数据 (用户ID/体重/身高/年龄/性别)
	BICYCLE_CONTROL_MODE	,			//运动模式 (运动ID/模式/模式段数/模式倒计值)
	BICYCLE_CONTROL_ENABLE	,			//功能控制 (用户阻力调整)  (0:关闭 1:开启  BICYCLE_CONTROL_READY 指令会重置所有功能为开启状态)
	BICYCLE_CONTROL_DATAS	,			//模式数据 (索引/数据...) 模式数据依运动模式而定
};

//系统模式(高4位为模式类型，低4位为倒计类型)
typedef NS_ENUM(int, BicycleMode) {
	BICYCLE_MODE_NORMAL		= 0,		//常规模式（自由模式）
	BICYCLE_MODE_TIMER		,			//倒计时间模式
    BICYCLE_MODE_DISTANCE	,			//倒计距离模式
    BICYCLE_MODE_CALORIES	,			//倒计卡路里模式
	BICYCLE_MODE_COUNTER	,			//倒计数模式
	
	//当以下模式有多段数据时，不能使用BICYCLE_MODE_NORMAL倒计，否则只有第1段有效
	BICYCLE_MODE_LEVEL		= 0x10,		//阻力控制（程式模式）
    BICYCLE_MODE_HRC		= 0x20,		//心率控制模式
	BICYCLE_MODE_WATT		= 0x30,		//瓦特控制模式
};

typedef NS_ENUM(int, BicycleError) {
	BICYCLE_ERROR_E00		= 1,
	BICYCLE_ERROR_E01		,
	BICYCLE_ERROR_E02		,
	BICYCLE_ERROR_E03		,
	BICYCLE_ERROR_E04		,
	BICYCLE_ERROR_E05		,
};

typedef NS_ENUM(int, BicycleStartError) {
	BICYCLE_START_ERROR				= 1,	//系统错误（见 BicycleError）
	BICYCLE_START_ERROR_SLEEP		,		//睡眠中
	BICYCLE_START_ERROR_RUNNING		,		//已运行
	BICYCLE_START_ERROR_TIMEOUT		,		//通讯超时
};

typedef struct {
    uint    count;				//程式段数
    Byte    data[128];			//目标数据
    UInt16  time[128];			//目标时长(秒)
} BicycleProgram;

//设备参数 ===============================================
@interface BicycleParam : NSObject

@property (nonatomic, assign) uint			counter;		//累计数
@property (nonatomic, assign) NSInteger		level;			//最高阻力级别
@property (nonatomic, assign) NSInteger		unit;			//系统单位(0:公 1:英)

@end

//健身车类 ===============================================
@interface BLEBicycle : FSBLEDevice

@property (nonatomic, readonly) BicycleParam		*param;		//健身车参数

@property (nonatomic, readonly) BicycleMode			mode;       //健身车当前模式
@property (nonatomic, readonly) NSInteger			value;      //健身车倒计量
@property (nonatomic, readonly) BicycleState		state;      //健身车当前状态

@property (nonatomic, readonly) NSUInteger			segment;	//程式当前所在段
@property (nonatomic, readonly) BicycleProgram		program;	//程式数据

- (void)startWithMode:(BicycleMode)mode value:(NSInteger)value;
- (void)startWithMode:(BicycleMode)mode value:(NSInteger)value program:(BicycleProgram *)program;

- (void)setTargetLevel:(NSInteger)level;

@end
